﻿using System.Data.SqlClient;
using System.Collections.Generic;
using System;
using System.Linq;
namespace EstoqueUnifeiADO.Dados {
    
    
    public partial class dsEntradaMercadoria {
    }
}
namespace EstoqueUnifeiADO.Dados.dsEntradaMercadoriaTableAdapters {
    public partial class ENTRADAMERCADORIATableAdapter 
    {
        public void ExecutarEntradaMercadorias(string usuario,EntradaNota nota,List<ProdQuant> items, SqlTransaction trans) 
        {
            

            bool transactionStartHere = (trans == null);
            try
            {

                if (trans == null)
                    trans=TableAdapterHelper.BeginTransaction(this);
                int key = Convert.ToInt32(this.InsertWithKey(nota.DataEntrada, nota.CodFornecedor, nota.NumeroNota,
                            nota.NumeroEmpenho,
                            nota.NumeroProcesso,
                            nota.AutorizacaoCompra,
                            items.Sum(x => x.Total),
                            0,
                            items.Sum(x => x.Total), (!string.IsNullOrEmpty(nota.AutorizacaoCompra) )));
                using (dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIAITEMTableAdapter taitem = new dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIAITEMTableAdapter())
                {

                    TableAdapterHelper.SetTransaction(taitem, trans);

                    foreach (var itemMerca in items)
                    {
                        taitem.Insert(key, itemMerca.CodProduto, itemMerca.Quantidade, itemMerca.Valor, itemMerca.Total);

                    }

                }
                using (dsMovimentacaoTableAdapters.MOVIMENTOTableAdapter ta = new dsMovimentacaoTableAdapters.MOVIMENTOTableAdapter())
                {
                    TableAdapterHelper.SetTransaction(ta, trans);

                    ta.MovimentaEstoque(items,
                                         null,
                                         1,
                                         "Entrada de mercadoria",
                                         1,
                                         null,
                                         (!string.IsNullOrEmpty(nota.AutorizacaoCompra)) ? TipoMovimentacao.EntradaFapep :
                                         TipoMovimentacao.EntraMercadoria,
                                         trans);
                }
                if (transactionStartHere)
                    trans.Commit();
            }
            catch (System.Exception)
            {
                if (transactionStartHere)
                    trans.Rollback();
                throw;
            }
            finally
            {
                if (transactionStartHere)
                    trans.Dispose();
            }
            
        }
    }
}
